package com.tinet.reservas.bean;
/**
 * 
 * Bean de reserva.
 *
 * @author tinet
 */
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;

import com.tinet.reservas.ReservaDao;
import com.tinet.reservas.model.Reserva;
import com.tinet.reservas.model.Usuario;

import excepciones.ExisteReservaException;
/**
 * 
 *  mapeo de bean de reserva .
 *
 * @author tinet
 */
@Stateless(mappedName = "reservabean", name = "reservabean")
public class ReservaBeanImpl implements ReservaBean {
    /**
     * @param reservaDao .
     */
    private ReservaDao dao;
    /**
     * @param reservas .
     */
    private List<Reserva> reservas;
    /**
     * mapeo con la persistencia.
     */
    @PersistenceContext(unitName = "MySqlDS")
    private EntityManager em;
    /**
     *post constructor.
     */
    @PostConstruct
    // crea una instancia de dao en la clase bean
    private void init() {
        if (dao == null) {
            dao = new ReservaDao(em);

        }
    }
    /**
     * 
     * @method getReservas
     * @return reservas
     */
    public List<Reserva> getReservas() {
        return reservas;
    }
    /**
     * 
     * @method setReservas
     * @throws ExisteReservaException .
     * @param reservas .
     */
    public void setReservas(List<Reserva> reservas) {
        this.reservas = reservas;
    }
    /**
     * 
     * @method getEm
     * @return em .
     *
     */
    public EntityManager getEm() {
        return em;
    }
    /**
     * 
     * @method setEm
     * @param em .
     * @throws ExisteReservaException .
     */
    public void setEm(EntityManager em) {
        this.em = em;
    }

 
    /**
     * 
     * @method mostrarTodo
     * @return lista de reservas .
     * 
     */
    public List<Reserva> mostrarTodo() { // muestra todos los datos de la
        // tabla

        return dao.mostrarTodo();

    }
    /**
     * 
     * @method eliminar
     * @param reserva .
     * 
     */
    public void eliminar(Reserva reserva) {
        dao.eliminar(reserva);
    }
    /**
     * 
     * @method mostrarReserva
     * @return lista de reservas de un usuario .
     * @param user .
     */
    public List<Reserva> mostrarReservaDeUsuario(Usuario user) {
        return dao.mostrarReservaDeUsuario(user);
    }
    /**
     * 
     * @method mostrarReserva
     * @return objeto reserva .
     * @param reserva .
     */
    public Reserva mostrarReserva(Reserva reserva) {
        return dao.mostrarReserva(reserva);
    }
    /**
     * 
     * @method agregar
     * @param reserva .
     * @throws ExisteReservaException .
     */
    public void agregar(Reserva reserva) throws ExisteReservaException {
        Reserva reservaBuscada = new Reserva();

        try{
        reservaBuscada = dao.buscarReserva(reserva);
        } catch (NoResultException e) {
            e.printStackTrace();
        }

        if (reserva.getSalaId() == reservaBuscada.getSalaId()
                && reserva.getFechaReserva().equals(
                        reservaBuscada.getFechaReserva())
                && reserva.getHoraInicio().equals(
                        reservaBuscada.getHoraInicio())) {
            throw new ExisteReservaException();
        } else {
            dao.agregar(reserva);
        } //end if

    }
}
